﻿using System;
using System.Data;
using System.Windows.Forms;
using Nortec.Security;
using Litografia.BusinessComponents;
using Litografia.BusinessEntities;


namespace Litografia.UI.Mantenimientos
{
    public partial class MantParametrosBodegaForm : BaseForm
    {
        public MantParametrosBodegaForm()
        {
            InitializeComponent();
        }

        #region Declarations
        BEParametrosBodega parametrosBodega;
        #endregion

        #region Event Handlers
        private void MantParametrosBodegaForm_Load(object sender, EventArgs e)
        {
            ConfigureToolBar(toolStrip, ToolBarButtons.Save |
                                        ToolBarButtons.Close);

            parametrosBodega = BCParametrosBodega.Get(NortecMembership.CompanyId, NortecMembership.BranchId);

            if (parametrosBodega.ParametrosBodega.Rows.Count == 1)
            {
                LoadBodegaCombo(cmbMateriaPrima, parametrosBodega.Bodega, parametrosBodega.ParametrosBodega[0].BodegaMateriaPrima);
                LoadBodegaCombo(cmbProductoProceso, parametrosBodega.Bodega, parametrosBodega.ParametrosBodega[0].BodegaProductoEnProceso);
                LoadBodegaCombo(cmbProductoTerminado, parametrosBodega.Bodega, parametrosBodega.ParametrosBodega[0].BodegaProductoTerminado);
                toolStrip.ItemClicked += ToolStripItemClicked;
            }
            else
            {
                ShowError("La tabla Lit_ParametrosBodega no se encuentra inicializada adecuadamente para esta aplicación. Por favor contacte al departamento de IT.");
                Close();
            }


        }
        private void ToolStripItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch ((ToolBarButtons)e.ClickedItem.Tag)
            {
                case ToolBarButtons.Save:
                    Save();
                    break;
                case ToolBarButtons.Close:
                    Close();
                    break;
            }
        }
        #endregion

        #region Methods: Private
        private static void LoadBodegaCombo(ComboBox combo, DataTable bodegas, int selectedBodega)
        {
            var source = (BEParametrosBodega.BodegaDataTable)bodegas.Copy();
            combo.ValueMember = source.BodegaIdColumn.ColumnName;
            combo.DisplayMember = source.BodegaNombreColumn.ColumnName;
            combo.DataSource = source;
            
            combo.SelectedValue = selectedBodega.ToString();
        }
        
        private void Save()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                if (ValidateEntries())
                {
                    var parametros = Pack();
                    BCParametrosBodega.Update(parametros);
                    ShowConfirmation("Los parámetros de bodegas han sido actualizados exitosamente");
                }
            }
            catch (Exception ex)
            {
                DisplayError("No se pudo actualizar los parámetros de bodegas", ex);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        private bool ValidateEntries()
        {
            var functionReturnValue = false;
            var msg = "";

            var selectedMateriaPrima = (int)cmbMateriaPrima.SelectedValue;
            var selectedProductoProceso = (int)cmbProductoProceso.SelectedValue;
            var selectedProductoTerminado = (int)cmbProductoTerminado.SelectedValue;

            if (selectedMateriaPrima == selectedProductoProceso ||
                selectedMateriaPrima == selectedProductoTerminado ||
                selectedProductoProceso == selectedProductoTerminado)
            {
                msg = "No se puede designar la misma bodega para diferentes usos";
            }
            else
                functionReturnValue = true;

            if (!functionReturnValue)
                MessageBox.Show(msg, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            return functionReturnValue;
        }
        private BEParametrosBodega.ParametrosBodegaRow Pack()
        {

            parametrosBodega.ParametrosBodega[0].BodegaMateriaPrima = (int)cmbMateriaPrima.SelectedValue;
            parametrosBodega.ParametrosBodega[0].BodegaProductoEnProceso = (int)cmbProductoProceso.SelectedValue;
            parametrosBodega.ParametrosBodega[0].BodegaProductoTerminado = (int)cmbProductoTerminado.SelectedValue;

            return parametrosBodega.ParametrosBodega[0];
        }
        #endregion

    }
}
